package com.example.partybuilding.service;

import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Service
public class QuestionService {

    private Map<Integer, String> questions = new HashMap<>();
    private Map<String, String> answers = new HashMap<>();

    public QuestionService() {
        // 初始化党建相关的问题和答案
        questions.put(1, "毕业生的积极分子阶段和发展对象阶段材料整理需要什么？");
        questions.put(2, "申请入党到成为积极分子，间隔时间？");
        questions.put(3, "积极分子到发展对象，间隔时间？");
        questions.put(4, "发展对象到预备党员，间隔时间？");
        questions.put(5, "预备党员到正式党员，间隔时间？");
        questions.put(6, "思想汇报多长时间写一次？");
        questions.put(7, "党员证明的模板？");
        questions.put(8, "档案接收时候，问题档案反馈的函（模板）");
        questions.put(9, "党员档案接收时候，材料检查列表？");
        questions.put(10, "档案转接纸质版介绍信的模板？");
        questions.put(11, "政审材料的模板？");
        questions.put(12, "学校是否可以接收积极分子阶段和发展对象阶段的学生关系？");
        questions.put(13, "学生由积极分子的身份转到本校，发展时间怎么算？");
        questions.put(14, "学生由预备党员的身份转到本校，转正时间怎么算？");
        questions.put(15, "毕业生滞留党员党费如何收取？");
        questions.put(16, "文法学院各学生支部书记以及党支部委员会的名单？");
        questions.put(17, "党龄和入党时间");
        questions.put(18, "党员同志线上党支部的名称和党员材料中的党支部名称不一致，是否有影响？");
        questions.put(19, "党员系统里面，线上党支部的人员数量上限是多少？");
        questions.put(20, "线上党支部，有几名正式党员组成？");
        questions.put(21, "学生党员档案的四大本写错怎么办？");
        questions.put(22, "党员档案检查注意事项？");
        questions.put(23, "公文格式模板？");
        questions.put(24, "党建部门纳新报名表？");
        questions.put(25, "每学期各学生党支部党日活动举办次数？间隔时间？");
        questions.put(26, "预备党员转正大会的流程？");
        questions.put(27, "三会一课的模板？");
        questions.put(28, "非河南本地党员党关系的线上转接的注意事项");
        questions.put(29, "若学生党关系要转接到部队，注意事项？");
        questions.put(30, "入党志愿书书写注意事项");

        answers.put("毕业生的积极分子阶段和发展对象阶段材料整理需要什么？", "详见压缩包。");
        answers.put("申请入党到成为积极分子，间隔时间？", "至少半年");
        answers.put("积极分子到发展对象，间隔时间？", "至少一年");
        answers.put("发展对象到预备党员，间隔时间？", "大概间隔两个月");
        answers.put("预备党员到正式党员，间隔时间？", "间隔一年。");
        answers.put("思想汇报多长时间写一次？", "每三个月一次，起止日期是成为积极分子的当月算起");
        answers.put("党员证明的模板？", "图片，注意信息核对");
        answers.put("档案接收时候，问题档案反馈的函（模板）", "图片，注意信息核对");
        answers.put("党员档案接收时候，材料检查列表？", "图片，注意事项");
        answers.put("档案转接纸质版介绍信的模板？", "图片，注意信息核对");
        answers.put("政审材料的模板？", "word模板");
        answers.put("学校是否可以接收积极分子阶段和发展对象阶段的学生关系？", "可以，但需要有积极分子材料和发展对象阶段材料");
        answers.put("学生由积极分子的身份转到本校，发展时间怎么算？", "再考察半年之后，可进入发展阶段。");
        answers.put("学生由预备党员的身份转到本校，转正时间怎么算？", "按期转正。");
        answers.put("毕业生滞留党员党费如何收取？", "毕业两年内同志，0.2/月；\n毕业超两年同志，5元/月。");
        answers.put("文法学院各学生支部书记以及党支部委员会的名单？", "excel表格（标注更新日期）");
        answers.put("党龄和入党时间", "党龄计算从转为正式党员开始\n入党时间是成为预备党员的时间");
        answers.put("党员同志线上党支部的名称和党员材料中的党支部名称不一致，是否有影响？", "没有影响。");
        answers.put("党员系统里面，线上党支部的人员数量上限是多少？", "不超50人。");
        answers.put("线上党支部，有几名正式党员组成？", "3名党员组成");
        answers.put("学生党员档案的四大本写错怎么办？", "换页，网上自己找，80克白纸，只能轻，不能重。");
        answers.put("党员档案检查注意事项？", "本校要求发展党员过程中，四大本必须有。\n（1）入党志愿书 \n（2）发展党员全程纪实本\n（3）预备党员考察鉴定表 \n（4）积极分子登记表。\n且，不能存在任何修改和涂抹的痕迹。");
        answers.put("公文格式模板？", "详见模板");
        answers.put("党建部门纳新报名表？", "详见模板");
        answers.put("每学期各学生党支部党日活动举办次数？间隔时间？", "单周，单数支部召开；双周，双数支部召开。");
        answers.put("预备党员转正大会的流程？", "详见模板");
        answers.put("三会一课的模板？", "详见模板");
        answers.put("非河南本地党员党关系的线上转接的注意事项", "各省党员系统不一致，非本省党员关系需要先转接至“非建库”，再进行正常转接。");
        answers.put("若学生党关系要转接到部队，注意事项？", "线上关系转接到“非建库”，介绍信抬头仅写“部队”二字！");
        answers.put("入党志愿书书写注意事项", "P11中“支部大会通过预备党员能够转为正式党员的决议”中，支部大会的时间必须精确到xx年xx月xx日。");
    }

    public List<Map.Entry<Integer, String>> getPaginatedQuestions(int page, int pageSize) {
        int fromIndex = (page - 1) * pageSize;
        int toIndex = Math.min(fromIndex + pageSize, questions.size());
        return questions.entrySet().stream()
                .skip(fromIndex)
                .limit(toIndex - fromIndex)
                .collect(Collectors.toList());
    }

    public int getTotalPages(int pageSize) {
        return (int) Math.ceil((double) questions.size() / pageSize);
    }

    public String getAnswerById(Integer id) {
        String question = questions.get(id);
        if (question != null) {
            return answers.get(question);
        }
        return null;
    }

    public String getQuestionById(Integer id) {
        return questions.get(id);
    }
}